package com.jdd.fintech.morse.plugin.strategy;

import com.alibaba.fastjson.JSONObject;
import com.jdd.fintech.morse.plugin.ecrypts.SymmetricCrypto;
import com.jdd.fintech.morse.plugin.plugconfig.MorsePlugValueConfig;
import com.jdd.fintech.morse.plugin.strategy.context.AbstractDataEncryptAndDecryptStrategy;
import com.jddglobal.filter.support.exception.FilterException;

/**
 * @description: 云地结合数据加密策略类
 * @credit: 2021-12-24 11:05
 * @author: fengcheng
 **/
public class ClDataEncryptAndDecryptStrategy extends AbstractDataEncryptAndDecryptStrategy {

    /**
     * 数据加密策略接口方法(云地结合使用)
     * @param plugValueConfig   插件值对象
     * @param jsonObject        请求对象
     * @param scObj             算法对象
     * @return
     * @throws FilterException 方法
     */
    @Override
    public String dataEncryptsStrategyMethod(MorsePlugValueConfig plugValueConfig, JSONObject jsonObject, SymmetricCrypto scObj) throws FilterException {
        log.info("ClDataEncryptAndDecryptStrategy.dataEncryptsStrategyMethod.云地结合的加密操作与金条使用同一种逻辑，故此处不做处理！");
        return null;
    }

    /**
     * 数据解密策略接口方法(云地结合使用)
     * @param plugValueConfig   插件值对象
     * @param jsonObject        请求对象
     * @param scObj             算法对象
     * @return
     * @throws FilterException EncryptionAndDecryption
     */
    @Override
    public String dataDecryptsStrategyMethod(MorsePlugValueConfig plugValueConfig, JSONObject jsonObject, SymmetricCrypto scObj) throws FilterException {
        log.info("ClDataEncryptAndDecryptStrategy.dataDecryptsStrategyMethod.云地结合的解密操作与金条使用同一种逻辑，故此处不做处理！");
        return null;
    }

    /**
     * 构建公共请求对象(云地结合使用)
     * @param plugValueConfig
     * @param tenantId
     * @param productCode
     * @param jsonObject
     * @return
     */
    @Override
    public String buildCommonRequestObjMethod(MorsePlugValueConfig plugValueConfig, String tenantId, String productCode, JSONObject jsonObject) throws FilterException {
        log.info("ClDataEncryptAndDecryptStrategy.buildCommonRequestObjMethod.云地结合---构建响应数据(云地结合返回的数据结构符合文档规定好的响应数据结构，故不需要进行重新构建)");
        return jsonObject.toJSONString();
        /*String interfaceRequestDirection = CommonMethodUtils.getInterfaceRequestDirection(plugValueConfig);
        //判断是否是JSON,如果不是直接返回原始json字符串
        if(!JsonStringUtils.judgeIsJson(interfaceRequestDirection, jsonObject)){
            return jsonObject.toJSONString();
        }
        try {
            jsonObject.put("tenantId", tenantId);
            jsonObject.put("productCode", productCode);
            jsonObject.put(OpenApiConstans.SYSSIGN, jsonObject.getString(OpenApiConstans.SYSSIGN));
            log.debug("ClDataEncryptAndDecryptStrategy.buildCommonRequestObjMethod.云地结合---构建响应数据======结束");
            return jsonObject.toJSONString();
        } catch (Exception e) {
            log.error("ClDataEncryptAndDecryptStrategy.buildCommonRequestObjMethod.云地结合|数据格式错误，转换失败|解密后的数据|jsonObject:{}|异常信息：{}", jsonObject.toJSONString(), e.getMessage(), e);
            return jsonObject.toJSONString();
        }*/
    }
}
